<?php
/**
 * Created by PhpStorm.
 * Author: ljz
 * Date: 2023/5/09
 * Time: 12:01
 */

namespace App\backend\models;


use App\common\models\BaseModel;
use Illuminate\Support\Facades\DB;

/**
 * Class CouponModel
 * @package app\backend\models
 */
class CouponModel extends BaseModel
{
    const table = 'coupon';

    public function __construct() {

    }

    /**
     * 查询字段规则
     *
     * @return array
     */
    static public function rules()
    {
        return [];
    }

    /**
     * 添加/编辑 通用券字段规则
     *
     * @return array
     */
    static public function modify_universal_rules()
    {
        return [
            'id' => 'int', // 卡券ID
            'name' => 'required|string|max:20', //卡券名称
            'city' => 'required|string', //城市id多个
            'category' => 'required|int', //分类或圈子id
            'coupon_type' => 'required|int', //券类型
            'remitted_money' => 'required', //抵扣金额
            'stock' => 'required|int', //库存
            'subsidy_type' => 'required|int', //补贴方式
            'get_type' => 'required|int', //补贴方式
            'get_time_type' => 'required|int', //可领取时间段
            'use_time_start' => 'required|string', //有效时间开始
            'use_time_end' => 'required|string', //有效时间结束
            'get_limit_max' => 'required|int', //每人限领数量
            'is_open' => 'required|int', //公开性
            'use_limit_max' => 'required|int', //单笔使用数量
        ];
    }


    /**
     * 添加/编辑 指定券字段规则
     *
     * @return array
     */
    static public function modify_dedicated_rules()
    {
        return [
            'id' => 'int', // 卡券ID
            'name' => 'required|string|max:20', //卡券名称
            'city' => 'required|string', //城市id多个
            'shop_id' => 'required|int', //门店id
            'coupon_type' => 'required|int', //券类型
            'remitted_money' => 'required', //抵扣金额
            'stock' => 'required|int', //库存
            'get_type' => 'required|int', //补贴方式
            'confine_type' => 'required|int', //限制条件
            'except_type' => 'required|int', //除外条件
            'get_time_type' => 'required|int', //可领取时间段
            'use_time_start' => 'required|string', //有效时间开始
            'use_time_end' => 'required|string', //有效时间结束
            'get_limit_max' => 'required|int', //每人限领数量
            'is_open' => 'required|int', //公开性
            'use_limit_max' => 'required|int', //单笔使用数量
        ];
    }


    /**
     * 删除
     *
     * @return array
     */
    static public function update_rules()
    {
        return [
            'id' => 'required|int', // 卡券ID
        ];
    }

    /**
     * 字段验证返回错误信息
     *
     * @return array
     */
    static public function message()
    {
        return [
            'id.required' => '卡券ID不能为空',
            'name.required' => '卡券名称不能为空',
            'name.max' => '卡券名称长度超过限制',
            'city.required' => '城市不能为空',
            'category.required' => '分类或圈子不能为空',
            'category.integer' => '分类或圈子数据类型错误',
            'shop_id.required' => '门店不能为空',
            'shop_id.integer' => '门店数据类型错误',
            'coupon_type.required' => '券类型不能为空',
            'coupon_type.integer' => '券类型数据类型错误',
            'remitted_money.required' => '抵扣金额不能为空',
            'stock.required' => '库存不能为空',
            'stock.integer' => '库存数据类型错误',
            'subsidy_type.required' => '补贴方式不能为空',
            'subsidy_type.integer' => '补贴方式数据类型错误',
            'get_type.required' => '发放方式不能为空',
            'get_type.integer' => '发放方式数据类型错误',
            'confine_type.required' => '限制条件不能为空',
            'confine_type.integer' => '限制条件数据类型错误',
            'except_type.required' => '除外条件不能为空',
            'except_type.integer' => '除外条件数据类型错误',
            'get_time_type.required' => '可领取时间不能为空',
            'get_time_type.integer' => '可领取时间数据类型错误',
            'use_time_start.required' => '有效时间开始不能为空',
            'use_time_end.required' => '有效时间结束不能为空',
            'get_limit_max.required' => '可领取时间不能为空',
            'get_limit_max.integer' => '可领取时间数据类型错误',
            'is_open.required' => '公开性不能为空',
            'is_open.integer' => '公开性数据类型错误',
            'use_limit_max.required' => '单笔使用数量不能为空',
            'use_limit_max.integer' => '单笔使用数量数据类型错误',
        ];
    }

    /**
     * 数据库 - 查询卡券列表
     * @param $page string //分页页数
     * @param $limit string //分页条数
     * @param $where_in_data array //in 查询条件 参数数组
     * @param $where_data array //查询条件 参数数组
     * @return array
     */
    static public function listed($page, $limit, $where_data = [], $where_in_data = [])
    {
        $query = DB::table(self::table)
            ->select('id', 'name', 'city', 'coupon_type', 'category', 'shop_id', 'remitted_money', 'subsidy_type', 'subsidy_money', 'use_time_start', 'use_time_end', 'created_at', 'stock')
            ->where($where_data);

        if (!empty($where_in_data)) {
            $query->whereIn('id', $where_in_data);
        }

        $data = $query->apiPaginate($limit, ['*'], 'page', $page)->toArray();

        return $data;
    }

    /**
     * 数据库 - 删除卡券
     *
     * @param $where_data array //查询条件 参数数组
     * @param $update_data array //更新 参数数组
     * @return array
     */
    static public function deleteds($where_data, $update_data)
    {
        $data = DB::table(self::table)
            ->where($where_data)
            ->update($update_data);

        return json_decode($data, true);
    }

    /**
     * 数据库 - 更新数据
     * @param $id   //卡券ID
     * @param $data //参数数组
     * @return array
     */
    static public function updatedData($id, $data)
    {
        $data = DB::table(self::table)
            ->where('id','=', $id)
            ->update($data);

        return $data;
    }

    /**
     * 数据库 - 插入数据
     * @param $data //参数数组
     * @return array
     */
    static public function insertData($data)
    {
        $data = DB::table(self::table)->insert($data);
        return $data;
    }

    /**
     * 数据库 - 查询单条
     * @param $data //参数数组
     * @return array
     */
    static public function detail($where_data)
    {
        $data = DB::table(self::table)
            ->select('id', 'name', 'city', 'coupon_type', 'category', 'shop_id', 'satisfy_money', 'remitted_money', 'stock', 'subsidy_type', 'subsidy_money', 'get_type', 'price', 'confine_type', 'confine_id', 'except_type', 'except_id', 'get_time_type', 'get_time_start', 'get_time_end', 'use_time_start', 'use_time_end', 'get_limit_max', 'is_open', 'use_limit_max', 'content')
            ->where($where_data)
            ->first();

        return $data;
    }

    /**
     * 数据库 - 根据条件查多个卡券id
     * @param $data //参数数组
     * @return array
     */
    static public function getCouponIds($where_data)
    {
        $data = DB::table(self::table)
            ->select('id')
            ->where($where_data)
            ->get()
            ->map(function ($value) {
                return (array)$value;
            })
            ->toArray();

        return $data;
    }

    /**
     * 根据id获取名称
     *
     * @param $ids
     * @return array
     */
    static public function getCouponName($ids)
    {
        $data = DB::table(self::table)
            ->select('id', 'name')
            ->whereIn('id', $ids)
            ->get()
            ->map(function ($value) {
                return (array)$value;
            })
            ->toArray();

        return $data;
    }
}
